from flask_wtf import Form
# 登录表单类
# 导入需要使用的类
from sqlalchemy import or_
from wtforms import StringField, PasswordField, SubmitField, RadioField, SelectField,BooleanField
from wtforms.validators import length, DataRequired, Regexp, ValidationError

from user.models import User


class registerForm(Form):
    username = StringField(label='用户名', validators=[
        length(min=6, max=16, message='用户名必须在6-16个字符之间'),
        DataRequired('该字段不能为空')
    ])
    # 密码
    password = PasswordField(label='密码', validators=[
        length(min=3, max=16,message='密码在3-16位之间'),
        DataRequired('该字段不能为空'),
        Regexp(regex=r'[0-9A-Za-z_]{3,16}', message='密码不能包含除数字、字母和下划线以为的字符')
    ])
    # 确认密码
    passwords = PasswordField(label='确认密码', validators=[
        length(min=3, max=16, message='密码在3-16位之间'),
        DataRequired('该字段不能为空'),
        Regexp(regex=r'[0-9A-Za-z_]{3,16}', message='密码不能包含除数字、字母和下划线以为的字符')
    ])
    uphone = StringField(label='手机号', validators=[
        length(min=10, max=11, message='手机号为11位'),
        DataRequired('该字段不能为空'),
        Regexp(regex=r'[0-9]{10,11}', message='0-9的纯数字')
    ])

    #提交
    submit = SubmitField(label='注册')

    # 自定义检验器
    # 必须是validate开头，validate后面跟要检验的字段
    #检测用户名
    def validate_username(self, field):
        # self表示的是表单对象
        # field表示的是要检验的属性字段
        print(field)
        # 获取字段中的数据值
        print(field.data)
        # 检验用户名是否存在
        user = User.query.filter(User.uname == field.data).first()
        if user:
            # 抛出错误信息
            raise ValidationError('用户名已经存在')
    # 检测手机号
    def validate_uphone(self, field):
        # self表示的是表单对象
        # field表示的是要检验的属性字段
        print(field)
        # 获取字段中的数据值
        print(field.data)
        # 检验用户名是否存在
        user = User.query.filter(User.uphone == field.data).first()
        if user:
            # 抛出错误信息
            raise ValidationError('手机号已经存在')

